/*
 * Dodanie do tabeli DNI_KALENDARZOWE brakujących dni z podanego zakresu dni.
 * PN-PT zostają ustawione jako dni robocze, SO-ND jako dni wolne.
 * Wszystkim dniom nadana jest parzystość = 'X', czyli ani parzysty ani nieparzysty.
 *
 * in_date_begin: pierwsza data przedziału dni
 * in_date_end:   ostatnia data przedziału dni
 */
PROCEDURE add_missing_days (
	in_date_begin IN DATE ,
	in_date_end IN DATE
) IS
	var_date DATE := NULL;
	var_last_date DATE := NULL;
	tmp_num PLS_INTEGER := NULL;
	tmp_work CHAR(1) := NULL;
	tmp_weekday CHAR(1) := NULL;
BEGIN
	COMMON.log('PROCEDURE add_missing_days (d1 = '||to_char(in_date_begin,'YYYY-MM-DD')||', d2 = '||to_char(in_date_end,'YYYY-MM-DD')||')');

	var_date      := in_date_begin;
	var_last_date := in_date_end;
		
	-- iteracja po dniach z zadanego przedziału
	WHILE var_date <= var_last_date
	LOOP
		SELECT COUNT(data) INTO tmp_num FROM dni_kalendarzowe WHERE data = var_date;
		IF tmp_num = 0 THEN
			tmp_weekday := to_char(var_date,'D');
			-- SO-ND - dni wolne, PN-PT - dni robocze
			IF tmp_weekday='6' OR tmp_weekday='7' THEN
				tmp_work := 'W';
			ELSE
				tmp_work := 'R';
			END IF;
			-- dodanie brakującego dnia kalendarzowego
			INSERT INTO dni_kalendarzowe (
				data, numer_dnia_tygodnia, parzystosc, nazwa,
				typ_dnia, poczatek_czasu_wolnego, koniec_czasu_wolnego
			) VALUES (
				var_date, tmp_weekday, 'X', NULL,
				tmp_work, NULL, NULL
			);
		END IF;

		var_date := var_date + 1;
	END LOOP;

END add_missing_days;
